<?php
class WeixinPay
{
	//api支付秘钥
	private $apiZhiFuMiYao="2c9c78581eb6002bb67c791a2a9bf667";  //(配置)
	private $post_url="https://api.mch.weixin.qq.com/pay/unifiedorder";
	
	private $inputObj=array(
	    					'appid'=>'wxb3ea3436af647254',//公众账号id(配置)
		    				'mch_id'=>'1405757402',//商户号(配置)
		    				//'device_info'=>'WEB',
		    				'nonce_str'=> '',//随机字符串
		    				//$inputObj->sign='';//签名(不用写值，后台有方法会自动生成签名)
		    				'body'=>'',//商品描述
		    				//'detail'=>'',//商品详情
		    				'out_trade_no'=>'',//商户订单号
		    				'total_fee'=>0.0,//订单金额(单位为 分 ；所有金额需要乘以100)
		    				'spbill_create_ip'=>'',//ip地址
		    				//'notify_url'=>'http://qcjn99.com/ss.php?con=wxnotifyurl&act=index',//接受微信支付异步通知回调地址(配置)
		    				'notify_url'=>'http://www.mwantu.com/paydo/wxnotifyurl.php',
		    				'trade_type'=>'APP',//交易类型
		    				//'sign'=>'',
	    			       );
//	public function __construct()
//	{
//		$this->inputObj['nonce_str']=md5(time());//随机字符串
//		$this->inputObj['spbill_create_ip']= '127.0.0.1';//用户ip
//	}
	
	
	public static function get_by_key($key)
	{
	    return $this->inputObj[$key];
	}
	
	private function buildXml($data, $isFirst=true)
	{
//		$this->inputObj['body']=$data['body'];//商品描述
//		$this->inputObj['out_trade_no']=$data['out_trade_no'];//商户订单号
//		$this->inputObj['total_fee']=$data['total_fee'];//订单金额(单位为 分 ；所有金额需要乘以100)
//		
//		//数组排序
    	ksort($data);
    	$str = '';
    	foreach ($data as $k => $v)
		{
			if($k != "sign" && $v != "" && !is_array($v)){
				$str .= $k . "=" . $v . "&";
			}
		}
		
		$str = trim($str, "&");
		
    	//字符串拼接密钥(API支付密钥)
		$tmpStr=$str."&key={$this->apiZhiFuMiYao}";
		
		
		if(!$isFirst)
		{
			$str.="&signs=".strtoupper(md5($tmpStr));
			return $str;
			die;
		}
		
		
		$data['sign']=strtoupper(md5($tmpStr));
		
		//拼接xml字符串
		$xml = "<xml>";
    	foreach ($data as $key=>$val)
    	{
    		//$xml.="<".$key.">".$val."</".$key.">";
    		if (is_numeric($val)){
    			$xml.="<".$key.">".$val."</".$key.">";
    		}else{
    			$xml.="<".$key."><![CDATA[".$val."]]></".$key.">";
    		}
        }
        $xml.="</xml>";
        return $xml;
	}
	
	//向指定服务器发送post数据，并得到返回字符串  得到  预支付交易会话id
	private function curl_post_data($xml)
	{
		if(empty($xml))die("xml字符串不能为空");
		$ch = curl_init();
		//设置超时
		curl_setopt($ch,CURLOPT_TIMEOUT, 30);//30秒
		curl_setopt($ch,CURLOPT_URL, $this->post_url);
		curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);
		curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE);
		//设置header
		curl_setopt($ch, CURLOPT_HEADER, FALSE);
		//要求结果为字符串且输出到屏幕上
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
		//post提交方式
		curl_setopt($ch, CURLOPT_POST, TRUE);
		curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
		//运行curl
		$da = curl_exec($ch);
		if($da)
		{
			curl_close($ch);
			preg_match("/^<xml([\s\S]*)\/xml>/",$da,$matches);
			
			$s=json_decode(json_encode(simplexml_load_string($matches[0], 'SimpleXMLElement', LIBXML_NOCDATA)), true);
			return $s['prepay_id'];
		}
		else 
		{
			$error = curl_errno($ch);
			curl_close($ch);
			return false;
		}
	}    
    
	public function get_sign_str($data)
	{
		$xml=$this->buildXml($data);
		
		$result=$this->curl_post_data($xml);
	
		if(!$result)return false;
		$this->inputObj['prepay_id']=$result;
		$obj2=array(
    				'appid'=>'wxb3ea3436af647254',//公众账号id (配置)
    				'partnerid'=>'1405757402',//商户号 (配置)
    				'prepayid'=>$result,//预支付交易会话id
					'package'=>'Sign=WXPay',//扩展字段
    				'noncestr'=>md5(time()),//随机字符串
    				'timestamp'=>time(),
    			   );
		return $this->buildXml($obj2, false);
	}
	
	
}
?>